package main

import "fmt"

func main9() {
	// 这个麻烦
	var idNames map[int]string // 不能直接赋值，它是空的
	// 分配空间，可以不指定，建议直接指定，提高性能
	idNames = make(map[int]string, 1)
	idNames[0] = "hello"
	idNames[1] = "word"
	fmt.Println(idNames) // map[0:hello 1:word]

	// 常用
	idNames1 := make(map[int]string)
	idNames1[0] = "wjf"
	fmt.Println(idNames1) //map[0:wjf]

	// 5、如何确定一个key是否存在map中
	// map中访问一个不存在越界问题，它认为所有的key都是有效的，所有访问一个不存在的key不会崩溃，返回这个类型的零值
	// 零值： bool => false   数字 => 0    字符串 => 空
	name9 := idNames[9]
	fmt.Println(name9)

	// 无法通过value来判断一个key是否存在，万一恰巧这个key的value就是零值
	// 使用ok机制， 也是go的异常获取
	value, ok := idNames[1] // 如果id=1存在，ok为true，反之为false
	if ok {
		fmt.Println(value) // word
	} else {
		fmt.Println("不存在")
	}

	// 6、删除map中元素，使用自由函数delete()
	// 删除不存在的key并不会报错
	delete(idNames, 0)
	fmt.Println("删除后：", idNames) //删除后： map[1:word]

	// 并发任务的时候， 要对map上锁
}
